/*
 * @Author: Vorga
 * @LastEditors: Vorga
 */
#ifndef LINK_ARRAY_H
#define LINK_ARRAY_H

#include <stdbool.h>
#include <stdio.h>

#include "node.h"

typedef struct LinkList
{
    //第一个元素
    Node *head;
    //最后一个元素
    Node *tail;
} LinkList;

//创建
LinkList *create_ll(void);
//判断表空
bool empty_ll(LinkList *list);
//添加节点
void add_head_ll(LinkList* list,void* data);

void add_tail_ll(LinkList* list,void* data);
//删除 头 尾 位置 值
bool del_head_ll(LinkList *list);

bool del_tail_ll(LinkList *list);
//销毁
void destory_ll(LinkList *list);

bool del_index_ll(LinkList *list,int index);

bool del_val_ll(LinkList *list,void* key,CMP cmp);
//查找
void* query_val_ll(LinkList *list,void* key,CMP cmp);
//访问
void* query_index_ll(LinkList *list,int index);
//修改
bool mod_index_ll(LinkList *list,int index,void* data);

bool mod_val_ll(LinkList *list,void* old_data,void* new_data,CMP cmp);
//长度
size_t size_ll(LinkList *list);
//遍历
void traversal_ll(LinkList *list,FUNC func);


#endif //LINK_ARRAY_H
